package 周赛;

import java.util.Arrays;
import java.util.Collections;

public class 你可以工作的最大周数 {

//    public long numberOfWeeks(int[] milestones) {
//        if (milestones.length==0)
//            return 0;
//        if (milestones.length==1)
//            return 1;
//        Arrays.sort(milestones);
//        int num=0,j=milestones.length-1,i=milestones.length-2;
////        for (int i = j; i > 0 ; i--) {
////            if (milestones[i]-milestones[i-1]==0){
////                num+=(milestones[i]*2);
////                milestones[i]=0;
////                milestones[i-1]=0;
////            }
////            if (milestones[i]-milestones[i-1]>0){
////                num+=(milestones[i-1]*2);
////                milestones[i]-=milestones[i-1];
////                milestones[i-1]=0;
////            }
////            Arrays.sort(milestones);
////        }
//        while (milestones[i]!=0){
//            if (milestones[j]-milestones[i]==0){
//                num+=(milestones[i]*2);
//                milestones[i]=0;
//                milestones[j]=0;
//            }
//            if (milestones[j]-milestones[i]>0){
//                milestones[j]-=milestones[i];
//                milestones[i]=0;
//                num+=(milestones[i]*2);
//            }
////            if (milestones[j]-milestones[i]<0){
////                 milestones[i]-=milestones[j];
////                 milestones[j]=0;
////                 num+=(milestones[j]*2);
////                 j--;
////            }
//            Arrays.sort(milestones);
//        }
//        if (milestones[milestones.length-1]>0)
//            return num+1;
//        return num;
//    }
    //思路： 如果阶段任务最多的那个项目可以完成，那么其他项目必定可以全部完成。
    // 否则的话，我们需要以其他项目作为分隔来隔开任务最多的那个项目，
    // 在其他项目有remremrem个任务的情况下，这样最多可以安排2rem+1个任务。
    //二者取较小的那个即可。

        public long numberOfWeeks(int[] milestones) {
            Arrays.sort(milestones);
            long max = milestones[milestones.length-1];
            long sum=0;
            for (int i = 0; i < milestones.length; i++) {
                sum+=milestones[i];
            }
            long res = sum - max;
            return sum > 2*res+1 ? 2*res+1 : sum;
        }
}
